menubutton: Propagate focus-on-click
authorMatthias Clasen <mclasen@redhat.com>
Sun, 11 Apr 2021 19:22:00 +0000 (15:22 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 11 Apr 2021 19:32:15 +0000 (15:32 -0400)
Propagate the focus-on-click setting to the button
inside, so that setting menubuttons as !focus-on-click
works as expected. This helps for menubuttons in
header bars, where dragging on the button will otherwise
steal focus from the content.

gtk/gtkmenubutton.c

index eee296e37f77022307245ad7b188599285633a4d..15f06eb23a9b9265a539db0572af7ae368040175 100644 (file)
@@ -214,6 +214,22 @@ gtk_menu_button_get_property (GObject    *object,
     }
 }
 
+static void
+gtk_menu_button_notify (GObject    *object,
+                        GParamSpec *pspec)
+{
+  if (strcmp (pspec->name, "focus-on-click") == 0)
+    {
+      GtkMenuButton *self = GTK_MENU_BUTTON (object);
+
+      gtk_widget_set_focus_on_click (self->button,
+                                     gtk_widget_get_focus_on_click (GTK_WIDGET (self)));
+    }
+
+  if (G_OBJECT_CLASS (gtk_menu_button_parent_class)->notify)
+    G_OBJECT_CLASS (gtk_menu_button_parent_class)->notify (object, pspec);
+}
+
 static void
 gtk_menu_button_state_flags_changed (GtkWidget    *widget,
                                      GtkStateFlags previous_state_flags)
@@ -318,6 +334,7 @@ gtk_menu_button_class_init (GtkMenuButtonClass *klass)
 
   gobject_class->set_property = gtk_menu_button_set_property;
   gobject_class->get_property = gtk_menu_button_get_property;
+  gobject_class->notify = gtk_menu_button_notify;
   gobject_class->dispose = gtk_menu_button_dispose;
 
   widget_class->measure = gtk_menu_button_measure;